/******************************************************************
编程环境：----------
        软件:Arduino2.3.4
        硬件:Mega2560主控板, Mega2560扩展版,3s电池盒，锂电池*3
             Windows11操作系统电脑，方口USB数据线*1
             四麦克纳姆轮小车，语音模块*1，杜邦线若干
        库函数:<Arduino.h>, <uni_motor.h>

实验目的：-----------
        1.学会使用语音模块；
        2.基于语音模块搭建语音小车。

操作流程：----------
        详细请看操作视频.

实验现象：-----------
        _______________________________________________________
        唤醒词：土豆土豆           唤醒回复：我在/有什么可以帮到你
        退出命令：退下             退出回复：与需要再叫我
        -------------------------------------------------------
        说：前进       回复：前进        小车：前进5秒，停止1秒
        说：后退       回复：后退        小车：前进5秒，停止1秒
        说：左转       回复：左转        小车：前进5秒，停止1秒
        说：右转       回复：右转        小车：前进5秒，停止1秒
        说：左平移     回复：左平移      小车：前进5秒，停止1秒
        说：右平移     回复：右平移      小车：前进5秒，停止1秒
        说：停止       回复：停止        小车：前进5秒，停止1秒
        --------------------------------------------------------

注意事项：------------
        语音模块睡眠时间为30秒。意思就是：如果语音模块在30秒内没有接
        收到新的指令,语音模块会进入睡眠模式.直到下一次语音模块接收到唤醒词.

实验接线简略图：----------
    ￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
    电池仓         mega2560扩展版          语音模块         车轮
    12V母座~~~~~~~~~板载供电口1                
                      5V --------------------5V
                      RX3--------------------T
                      TX3 -------------------R
                      GND-------------------GND
                      M1  ................................小车左前轮
                      M2  ................................小车右前轮
                      M3  ................................小车左后轮
                      M4  ................................小车右后轮
    ￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
2024.12.19 Uni Tongchuang Intelligent Robot Technology CO.,Ltd
*******************************************************************/
#include <Arduino.h>
#include "uni_motor.h" //调用编码电机库
#define RATE 115200    //定义串口波特率
#define voice_ser Serial3 //设定语音模块串口
#define voice_rate 9600   //设定语音模块波特率
#define action_delay 5000  //小车动作执行时间
#define motor_speed_lf  0.1 //设定小车左前轮速度,单位:m/s
#define motor_speed_rf  0.1 //设定小车右前轮速度,单位:m/s
#define motor_speed_lb  0.1 //设定小车左后轮速度,单位:m/s
#define motor_speed_rb  0.1 //设定小车右后轮速度,单位:m/s

//电机参数部分----------------------------
/*枚举小车状态
FORWARD:前进  BACK:后退  LEFT:左转  RIGHT:右转
TRANS_LEFT:左平移  TRANS_RIGHT 右平移 STOP:小车停止*/
enum{FORWARD=1,BACK,LEFT,RIGHT,TRANS_LEFT,TRANS_RIGHT,STOP};
UNI_MOTOR motor1(1, true);  //声明小车左前轮
UNI_MOTOR motor2(2, true);  //声明小车右前轮
UNI_MOTOR motor3(3, true);  //声明小车左后轮
UNI_MOTOR motor4(4, true);  //声明小车右后轮
float reveive_voice;

void setup() {
  delay(1000);
  Serial.begin(RATE); //打开串口
  motor_init();       //编码电机引脚初始化
  voice_init();       //语音模块初始化
}

void loop() {
  get_voice();  //小车接收语音指令，执行相应动作
}
